home *** CD-ROM | disk | FTP | other *** search
- /* prime number befor x<0/after x>0 a given number t
- negative t return a negative result */
-
- #include "defs.h"
-
- int am_prime_ba(int t, int x)
- {
-
- int a,m=0,k=0;
- int s[2];
-
- if(t<0){
- t=-t;
- k=1;
- }
-
- if(x<0){
- if(t>5){
- a=t%6;
- if(a<2){
- s[0]=4;
- s[1]=2;
- m=t-a-1;
- }
- else{
- s[0]=2;
- s[1]=4;
- m=t-a+1;
- }
-
- for(;;){
- if(am_isPrime(m)){
- if(k)
- return -m;
- else
- return m;
- }
- m=m-s[0];
- if(am_isPrime(m)){
- if(k)
- return -m;
- else
- return m;
- }
- m=m-s[1];
- }
- }
- else if(t==3){
- if(k)
- return -2;
- else
- return 2;
- }
- else if(t>3){
- if(k)
- return -3;
- else
- return 3;
- }
- else if(t<3)
- return 0;
- }
- else if(x>0){
- if(t>5){
- a=t%6;
- if(a==0){
- s[0]=4;
- s[1]=2;
- m=t+1;
- }
- else if(a<5){
- a=6-a;
- s[0]=2;
- s[1]=4;
- m=t+a-1;
- }
- else if(a==5){
- s[0]=4;
- s[1]=2;
- m=t+2;
- }
- for(;;){
- if(am_isPrime(m)){
- if(k)
- return -m;
- else
- return m;
- }
- m=m+s[0];
- if(am_isPrime(m)){
- if(k)
- return -m;
- else
- return m;
- }
- m=m+s[1];
- }
- }
- else if(t<2){
- if(k)
- return -2;
- else
- return 2;
- }
- else if(t==2){
- if(k)
- return -3;
- else
- return 3;
- }
- else if(t<5){
- if(k)
- return -5;
- else
- return 5;
- }
- else{
- if(k)
- return -7;
- else
- return 7;
- }
- }
- else if(x==0){
- if(k)
- return -t;
- else
- return t;
- }
-
- return 0;
- }